package com.eva.databuilder.builders;

import com.eva.databuilder.bo.TemplateDataParameters;
import com.eva.databuilder.bo.TemplatePresetDataList;
import lombok.extern.slf4j.Slf4j;

import java.util.HashMap;
import java.util.Map;

/**
 * 模板数据构建器，所有数据构建器均继承该类
 */
@Slf4j
public abstract class AbstractTemplateDataBuilder<T> {

    /**
     * 构建数据
     *
     * @param parameters 构建数据参数
     * @return T
     */
    public abstract T build (TemplateDataParameters parameters);

    /**
     * 构建数据
     *
     * @param presetDataList 预设数据
     * @return Map<String, Object>
     */
    public static Map<String, Object> build (TemplatePresetDataList presetDataList) {
        Map<String, Object> data = new HashMap<>();
        while(presetDataList.hasNext()) {
            TemplatePresetDataList.TemplatePresetData presetData = presetDataList.next();
            // 回写构建器参数
            data.put(presetData.getCode() + "_PARAMETERS", presetData.getParameters());
            // 验证构建器是否实现
            if (presetData.getBuilder() == null) {
                log.warn("数据构建器 " + presetData.getCode() + " 未实现，已跳过构建！");
                continue;
            }
            // 构建数据
            Object result = presetData.getBuilder().build(presetData.getParameters());
            data.put(presetData.getCode(), result);
        }
        return data;
    }

}
